1 module mruby.variable; 2 3 import mruby; 4 import mruby.value; 5 import mruby.object; 6 import mruby.mrb_class; 7 8 extern (C): 9 10 struct global_variable 11 { 12 int counter; 13 mrb_value* data; 14 mrb_value function () getter; 15 void function () setter; 16 } 17 18 struct global_entry 19 { 20 global_variable* var; 21 mrb_sym id; 22 } 23 24 static const int MRB_SEGMENT_SIZE = 4; 25 26 struct segment { 27 mrb_sym[MRB_SEGMENT_SIZE] key; 28 mrb_value[MRB_SEGMENT_SIZE] val; 29 segment *next; 30 } 31 32 struct iv_tbl 33 { 34 segment* rootseg; 35 size_t size; 36 size_t last_len; 37 } 38 39 mrb_value mrb_vm_special_get (mrb_state*, mrb_sym); 40 void mrb_vm_special_set (mrb_state*, mrb_sym, mrb_value); 41 mrb_value mrb_vm_iv_get (mrb_state*, mrb_sym); 42 void mrb_vm_iv_set (mrb_state*, mrb_sym, mrb_value); 43 mrb_value mrb_vm_cv_get (mrb_state*, mrb_sym); 44 void mrb_vm_cv_set (mrb_state*, mrb_sym, mrb_value); 45 mrb_value mrb_vm_const_get (mrb_state*, mrb_sym); 46 void mrb_vm_const_set (mrb_state*, mrb_sym, mrb_value); 47 mrb_value mrb_const_get (mrb_state*, mrb_value, mrb_sym); 48 void mrb_const_set (mrb_state*, mrb_value, mrb_sym, mrb_value); 49 mrb_bool mrb_const_defined (mrb_state*, mrb_value, mrb_sym); 50 void mrb_const_remove (mrb_state*, mrb_value, mrb_sym); 51 mrb_bool mrb_iv_p (mrb_state* mrb, mrb_sym sym); 52 void mrb_iv_check (mrb_state* mrb, mrb_sym sym); 53 mrb_value mrb_obj_iv_get (mrb_state* mrb, RObject* obj, mrb_sym sym); 54 void mrb_obj_iv_set (mrb_state* mrb, RObject* obj, mrb_sym sym, mrb_value v); 55 mrb_bool mrb_obj_iv_defined (mrb_state* mrb, RObject* obj, mrb_sym sym); 56 void mrb_obj_iv_ifnone (mrb_state* mrb, RObject* obj, mrb_sym sym, mrb_value v); 57 mrb_value mrb_iv_get (mrb_state* mrb, mrb_value obj, mrb_sym sym); 58 void mrb_iv_set (mrb_state* mrb, mrb_value obj, mrb_sym sym, mrb_value v); 59 mrb_bool mrb_iv_defined (mrb_state*, mrb_value, mrb_sym); 60 mrb_value mrb_iv_remove (mrb_state* mrb, mrb_value obj, mrb_sym sym); 61 void mrb_iv_copy (mrb_state* mrb, mrb_value dst, mrb_value src); 62 mrb_bool mrb_const_defined_at (mrb_state* mrb, mrb_value mod, mrb_sym id); 63 mrb_value mrb_gv_get (mrb_state* mrb, mrb_sym sym); 64 void mrb_gv_set (mrb_state* mrb, mrb_sym sym, mrb_value val); 65 void mrb_gv_remove (mrb_state* mrb, mrb_sym sym); 66 mrb_value mrb_cv_get (mrb_state* mrb, mrb_value mod, mrb_sym sym); 67 void mrb_mod_cv_set (mrb_state* mrb, RClass* c, mrb_sym sym, mrb_value v); 68 void mrb_cv_set (mrb_state* mrb, mrb_value mod, mrb_sym sym, mrb_value v); 69 mrb_bool mrb_cv_defined (mrb_state* mrb, mrb_value mod, mrb_sym sym); 70 mrb_value mrb_obj_iv_inspect (mrb_state*, RObject*); 71 mrb_value mrb_mod_constants (mrb_state* mrb, mrb_value mod); 72 mrb_value mrb_f_global_variables (mrb_state* mrb, mrb_value self); 73 mrb_value mrb_obj_instance_variables (mrb_state*, mrb_value); 74 mrb_value mrb_mod_class_variables (mrb_state*, mrb_value); 75 mrb_value mrb_mod_cv_get (mrb_state* mrb, RClass* c, mrb_sym sym); 76 mrb_bool mrb_mod_cv_defined (mrb_state* mrb, RClass* c, mrb_sym sym); 77 mrb_sym mrb_class_sym (mrb_state* mrb, RClass* c, RClass* outer); 78 void mrb_gc_mark_gv (mrb_state*); 79 void mrb_gc_free_gv (mrb_state*); 80 void mrb_gc_mark_iv (mrb_state*, RObject*); 81 size_t mrb_gc_mark_iv_size (mrb_state*, RObject*); 82 void mrb_gc_free_iv (mrb_state*, RObject*);